import $http from '@/config/zhouWei-request/js_sdk/requestConfig'
import {toast, logout} from '@/utils/uni'

const request = ({url, method = METHOD_TYPE.GET, data}) => {
	//默认 无 说明：请求头
	const header = { 
		// 'Content-Type': 'application/json'
		// 'Content-Type': 'application/x-www-form-urlencoded'
	}

	// 设置token
	let token = uni.getStorageSync('token')
	if(token) {
		header['Authorization'] = token
		
	}
	header['Access-Control-Allow-Origin'] = '*'
	header['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE'
	header['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
	
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title: '加载中',
			mask: true
		})
		$http.request({
			url,
			data,
			method: method, // POST、GET、PUT、DELETE、JSONP，具体说明查看官方文档
			timeout: 30000,  // 默认 30000 说明：超时时间，单位 ms，具体说明查看官方文档
			dataType: "json",  // 默认 json 说明：如果设为 json，会尝试对返回的数据做一次 JSON.parse，具体说明查看官方文档
			responseType: "text",  // 默认 text 说明：设置响应的数据类型。合法值：text、arraybuffer，具体说明查看官方文档
			withCredentials: false,  // 默认 false 说明：跨域请求时是否携带凭证（cookies），具体说明查看官方文档
			isPrompt: true,//（默认 true 说明：本接口抛出的错误是否提示）
			load: true,//（默认 true 说明：本接口是否提示加载动画）
			header,
			isFactory: true, //（默认 true 说明：本接口是否调用公共的数据处理方法，设置false后isPrompt参数将失去作用）
		}).then(function (response) {
			uni.hideLoading()
			// 数据获取成功
			if(response.code === 'success' || response.code ==='200') {
				resolve(response)
			}else if(response.code == 401 || response.status == 401) {
				// 授权失效
				toast('授权失败，请再次登录')
				logout()
			}else {
				// 其他错误
				toast(response.info || response.message)
				reject(response)
			}
		}).catch(function (error) {
			uni.hideLoading()
			//这里只会在接口是失败状态返回，不需要去处理错误提示
			toast(error.info || error.message)
			reject(error)
		});
	})
}

const METHOD_TYPE = {
	GET: 'GET',
	POST: 'POST',
	PUT: 'PUT',
	PATCH: 'PATCH',
	DELETE: 'DELETE',
	JSONP: 'JSONP'
}

const getQueryString = (data) => {
	let ary = []
	const temp = (obj) => {
		for(let key of Object.keys(obj)) {
			let value = obj[key]
			if(value || value === false || value === 0 || (value instanceof Number && !isNaN(value))){
				if(typeof value === 'function') {
					continue
				}else if(typeof value === 'object') {
					if(Object.keys(value).length > 0) {
						temp(value)
					}
				}else {
					ary.push(`${key}=${value}`)
				}
			}
		}
	}
	temp(data)
	
	let str = ''
	if(ary.length) {
		str += '?'
		str += ary.join('&')
	}
	return str
}

export const Login = {
	// 账号密码登录
	loginByPass(data = {
		username,
		password
	}) {
		return request({
			url: 'api/user/login',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 微信授权登录
	loginByWeiXin(data = {
		code
	}) {
		return request({
			url: 'api/user/wxMiniProgramLogin',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 绑定手机号
	bindMobile(data = {
		mobile,
		password
	}) {
		return request({
			url: 'api/user/BindMobile',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 发送短信验证码
	sendSms(data = {
		mobile
	}) {
		return request({
			url: 'api/user/sendsms',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 修改密码
	changePassword(data = {
		mobile,
		newpassword
	}) {
		return request({
			url: 'api/user/resetpwd',
			method: METHOD_TYPE.POST,
			data
		})
	},
}

export const Home = {
	// 首页分销订单
	// type: 1进行中2已完成3已取消，不传就是全部
	indexFenxiao(data = {
		limit,
		page,
		company_name,
		type,
		begin,
		end
	}) {
		return request({
			url: `api/index/indexFenxiao${getQueryString(data)}`,
			method: METHOD_TYPE.GET
		})
	},
	// 首页我的公司数据
	indexCompany(data = {
		limit,
		page,
		company_name
	}) {
		return request({
			url: `api/index/indexCompany${getQueryString(data)}`,
			method: METHOD_TYPE.GET
		})
	},
	// 返佣中心
	yongjin(data = {
		limit,
		page,
		begin,
		end
	}) {
		return request({
			url: `api/user/yongjin${getQueryString(data)}`,
			method: METHOD_TYPE.GET
		})
	},
	// 个人中心
	userCenter() {
		return request({
			url: `api/user/index`,
			method: METHOD_TYPE.GET
		})
	},
	// 提现
	// type:1微信2支付宝
	withdrawal(data = {
		money,
		type,
		zhi_account,
		zhi_name
	}) {
		return request({
			url: 'api/user/withdrawal',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 功能反馈
	suggest(data = {
		content,
		img
	}) {
		return request({
			url: 'api/user/suggest',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 修改资料
	profile(data = {
		mobile,
		nickname,
		address,
		avatar
	}) {
		return request({
			url: 'api/user/profile',
			method: METHOD_TYPE.POST,
			data
		})
	},
}

export const Other = {
	// 上传接口
	upload(data = {
		file
	}) {
		return request({
			url: 'api/common/upload',
			method: METHOD_TYPE.POST,
			data
		})
	},
	// 使用手册
	shouce() {
		return request({
			url: 'api/index/shouce',
			method: METHOD_TYPE.GET
		})
	},
	// 疑难问题解答
	question() {
		return request({
			url: 'api/index/question',
			method: METHOD_TYPE.GET
		})
	},
}